/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP

#import <Foundation/Foundation.h>

#import "MTRDevice.h"

@interface MTRIdentify ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::IdentifyCluster * cppCluster;
- (chip::Controller::IdentifyCluster **)cppClusterSlot;
@end

@interface MTRGroups ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::GroupsCluster * cppCluster;
- (chip::Controller::GroupsCluster **)cppClusterSlot;
@end

@interface MTRScenes ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ScenesCluster * cppCluster;
- (chip::Controller::ScenesCluster **)cppClusterSlot;
@end

@interface MTROnOff ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::OnOffCluster * cppCluster;
- (chip::Controller::OnOffCluster **)cppClusterSlot;
@end

@interface MTROnOffSwitchConfiguration ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::OnOffSwitchConfigurationCluster * cppCluster;
- (chip::Controller::OnOffSwitchConfigurationCluster **)cppClusterSlot;
@end

@interface MTRLevelControl ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::LevelControlCluster * cppCluster;
- (chip::Controller::LevelControlCluster **)cppClusterSlot;
@end

@interface MTRBinaryInputBasic ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::BinaryInputBasicCluster * cppCluster;
- (chip::Controller::BinaryInputBasicCluster **)cppClusterSlot;
@end

@interface MTRDescriptor ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::DescriptorCluster * cppCluster;
- (chip::Controller::DescriptorCluster **)cppClusterSlot;
@end

@interface MTRBinding ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::BindingCluster * cppCluster;
- (chip::Controller::BindingCluster **)cppClusterSlot;
@end

@interface MTRAccessControl ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::AccessControlCluster * cppCluster;
- (chip::Controller::AccessControlCluster **)cppClusterSlot;
@end

@interface MTRBridgedActions ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::BridgedActionsCluster * cppCluster;
- (chip::Controller::BridgedActionsCluster **)cppClusterSlot;
@end

@interface MTRBasic ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::BasicCluster * cppCluster;
- (chip::Controller::BasicCluster **)cppClusterSlot;
@end

@interface MTROtaSoftwareUpdateProvider ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::OtaSoftwareUpdateProviderCluster * cppCluster;
- (chip::Controller::OtaSoftwareUpdateProviderCluster **)cppClusterSlot;
@end

@interface MTROtaSoftwareUpdateRequestor ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::OtaSoftwareUpdateRequestorCluster * cppCluster;
- (chip::Controller::OtaSoftwareUpdateRequestorCluster **)cppClusterSlot;
@end

@interface MTRLocalizationConfiguration ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::LocalizationConfigurationCluster * cppCluster;
- (chip::Controller::LocalizationConfigurationCluster **)cppClusterSlot;
@end

@interface MTRTimeFormatLocalization ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::TimeFormatLocalizationCluster * cppCluster;
- (chip::Controller::TimeFormatLocalizationCluster **)cppClusterSlot;
@end

@interface MTRUnitLocalization ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::UnitLocalizationCluster * cppCluster;
- (chip::Controller::UnitLocalizationCluster **)cppClusterSlot;
@end

@interface MTRPowerSourceConfiguration ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::PowerSourceConfigurationCluster * cppCluster;
- (chip::Controller::PowerSourceConfigurationCluster **)cppClusterSlot;
@end

@interface MTRPowerSource ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::PowerSourceCluster * cppCluster;
- (chip::Controller::PowerSourceCluster **)cppClusterSlot;
@end

@interface MTRGeneralCommissioning ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::GeneralCommissioningCluster * cppCluster;
- (chip::Controller::GeneralCommissioningCluster **)cppClusterSlot;
@end

@interface MTRNetworkCommissioning ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::NetworkCommissioningCluster * cppCluster;
- (chip::Controller::NetworkCommissioningCluster **)cppClusterSlot;
@end

@interface MTRDiagnosticLogs ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::DiagnosticLogsCluster * cppCluster;
- (chip::Controller::DiagnosticLogsCluster **)cppClusterSlot;
@end

@interface MTRGeneralDiagnostics ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::GeneralDiagnosticsCluster * cppCluster;
- (chip::Controller::GeneralDiagnosticsCluster **)cppClusterSlot;
@end

@interface MTRSoftwareDiagnostics ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::SoftwareDiagnosticsCluster * cppCluster;
- (chip::Controller::SoftwareDiagnosticsCluster **)cppClusterSlot;
@end

@interface MTRThreadNetworkDiagnostics ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ThreadNetworkDiagnosticsCluster * cppCluster;
- (chip::Controller::ThreadNetworkDiagnosticsCluster **)cppClusterSlot;
@end

@interface MTRWiFiNetworkDiagnostics ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::WiFiNetworkDiagnosticsCluster * cppCluster;
- (chip::Controller::WiFiNetworkDiagnosticsCluster **)cppClusterSlot;
@end

@interface MTREthernetNetworkDiagnostics ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::EthernetNetworkDiagnosticsCluster * cppCluster;
- (chip::Controller::EthernetNetworkDiagnosticsCluster **)cppClusterSlot;
@end

@interface MTRBridgedDeviceBasic ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::BridgedDeviceBasicCluster * cppCluster;
- (chip::Controller::BridgedDeviceBasicCluster **)cppClusterSlot;
@end

@interface MTRSwitch ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::SwitchCluster * cppCluster;
- (chip::Controller::SwitchCluster **)cppClusterSlot;
@end

@interface MTRAdministratorCommissioning ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::AdministratorCommissioningCluster * cppCluster;
- (chip::Controller::AdministratorCommissioningCluster **)cppClusterSlot;
@end

@interface MTROperationalCredentials ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::OperationalCredentialsCluster * cppCluster;
- (chip::Controller::OperationalCredentialsCluster **)cppClusterSlot;
@end

@interface MTRGroupKeyManagement ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::GroupKeyManagementCluster * cppCluster;
- (chip::Controller::GroupKeyManagementCluster **)cppClusterSlot;
@end

@interface MTRFixedLabel ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::FixedLabelCluster * cppCluster;
- (chip::Controller::FixedLabelCluster **)cppClusterSlot;
@end

@interface MTRUserLabel ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::UserLabelCluster * cppCluster;
- (chip::Controller::UserLabelCluster **)cppClusterSlot;
@end

@interface MTRBooleanState ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::BooleanStateCluster * cppCluster;
- (chip::Controller::BooleanStateCluster **)cppClusterSlot;
@end

@interface MTRModeSelect ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ModeSelectCluster * cppCluster;
- (chip::Controller::ModeSelectCluster **)cppClusterSlot;
@end

@interface MTRDoorLock ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::DoorLockCluster * cppCluster;
- (chip::Controller::DoorLockCluster **)cppClusterSlot;
@end

@interface MTRWindowCovering ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::WindowCoveringCluster * cppCluster;
- (chip::Controller::WindowCoveringCluster **)cppClusterSlot;
@end

@interface MTRBarrierControl ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::BarrierControlCluster * cppCluster;
- (chip::Controller::BarrierControlCluster **)cppClusterSlot;
@end

@interface MTRPumpConfigurationAndControl ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::PumpConfigurationAndControlCluster * cppCluster;
- (chip::Controller::PumpConfigurationAndControlCluster **)cppClusterSlot;
@end

@interface MTRThermostat ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ThermostatCluster * cppCluster;
- (chip::Controller::ThermostatCluster **)cppClusterSlot;
@end

@interface MTRFanControl ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::FanControlCluster * cppCluster;
- (chip::Controller::FanControlCluster **)cppClusterSlot;
@end

@interface MTRThermostatUserInterfaceConfiguration ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ThermostatUserInterfaceConfigurationCluster * cppCluster;
- (chip::Controller::ThermostatUserInterfaceConfigurationCluster **)cppClusterSlot;
@end

@interface MTRColorControl ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ColorControlCluster * cppCluster;
- (chip::Controller::ColorControlCluster **)cppClusterSlot;
@end

@interface MTRIlluminanceMeasurement ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::IlluminanceMeasurementCluster * cppCluster;
- (chip::Controller::IlluminanceMeasurementCluster **)cppClusterSlot;
@end

@interface MTRTemperatureMeasurement ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::TemperatureMeasurementCluster * cppCluster;
- (chip::Controller::TemperatureMeasurementCluster **)cppClusterSlot;
@end

@interface MTRPressureMeasurement ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::PressureMeasurementCluster * cppCluster;
- (chip::Controller::PressureMeasurementCluster **)cppClusterSlot;
@end

@interface MTRFlowMeasurement ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::FlowMeasurementCluster * cppCluster;
- (chip::Controller::FlowMeasurementCluster **)cppClusterSlot;
@end

@interface MTRRelativeHumidityMeasurement ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::RelativeHumidityMeasurementCluster * cppCluster;
- (chip::Controller::RelativeHumidityMeasurementCluster **)cppClusterSlot;
@end

@interface MTROccupancySensing ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::OccupancySensingCluster * cppCluster;
- (chip::Controller::OccupancySensingCluster **)cppClusterSlot;
@end

@interface MTRWakeOnLan ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::WakeOnLanCluster * cppCluster;
- (chip::Controller::WakeOnLanCluster **)cppClusterSlot;
@end

@interface MTRChannel ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ChannelCluster * cppCluster;
- (chip::Controller::ChannelCluster **)cppClusterSlot;
@end

@interface MTRTargetNavigator ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::TargetNavigatorCluster * cppCluster;
- (chip::Controller::TargetNavigatorCluster **)cppClusterSlot;
@end

@interface MTRMediaPlayback ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::MediaPlaybackCluster * cppCluster;
- (chip::Controller::MediaPlaybackCluster **)cppClusterSlot;
@end

@interface MTRMediaInput ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::MediaInputCluster * cppCluster;
- (chip::Controller::MediaInputCluster **)cppClusterSlot;
@end

@interface MTRLowPower ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::LowPowerCluster * cppCluster;
- (chip::Controller::LowPowerCluster **)cppClusterSlot;
@end

@interface MTRKeypadInput ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::KeypadInputCluster * cppCluster;
- (chip::Controller::KeypadInputCluster **)cppClusterSlot;
@end

@interface MTRContentLauncher ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ContentLauncherCluster * cppCluster;
- (chip::Controller::ContentLauncherCluster **)cppClusterSlot;
@end

@interface MTRAudioOutput ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::AudioOutputCluster * cppCluster;
- (chip::Controller::AudioOutputCluster **)cppClusterSlot;
@end

@interface MTRApplicationLauncher ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ApplicationLauncherCluster * cppCluster;
- (chip::Controller::ApplicationLauncherCluster **)cppClusterSlot;
@end

@interface MTRApplicationBasic ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ApplicationBasicCluster * cppCluster;
- (chip::Controller::ApplicationBasicCluster **)cppClusterSlot;
@end

@interface MTRAccountLogin ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::AccountLoginCluster * cppCluster;
- (chip::Controller::AccountLoginCluster **)cppClusterSlot;
@end

@interface MTRElectricalMeasurement ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::ElectricalMeasurementCluster * cppCluster;
- (chip::Controller::ElectricalMeasurementCluster **)cppClusterSlot;
@end

@interface MTRTestCluster ()
// Must only touch cppCluster on the Matter queue.
@property (readonly) chip::Controller::TestClusterCluster * cppCluster;
- (chip::Controller::TestClusterCluster **)cppClusterSlot;
@end
